package com.fanghaoran.service;

import com.fanghaoran.bean.Interaction;
import com.fanghaoran.dao.InfoDao;
import com.fanghaoran.entity.Users;

import java.sql.SQLException;

/**
 * @Author: win11
 * @Date: 2023/03/22/13:44
 * @Description: 用户查看/编辑个人信息操作的业务处理
 */
public class InfoService {
    /**
     * dao层 处理数据库操作
     */
    private final InfoDao infoDao = new InfoDao();

    /**
     * 获取用户信息
     */
    public Interaction getInfo(String username) throws Exception {
        return infoDao.getInfo(username);
    }

    /**
     * 编辑用户信息
     */
    public Interaction updateInfo(Users user, String oldUsername, String oldTelephone) throws Exception {
        //手机号的正则表达式
        String tRegex = "(?:(?:\\+|00)86)?1\\d{10}$";

        //非数据库操作
        //判断文本输入框是否为空
        if (user.getUsername().length() == 0) {
            return new Interaction("用户名为空", null);
        }
        else if (user.getTelephone().length() == 0) {
            return new Interaction("手机号为空", null);
        }
        //手机号校验
        else if (!user.getTelephone().matches(tRegex)) {
            return new Interaction("手机号无效", null);
        }
        //校验完毕,将新数据进行数据库检验
        else {
            return infoDao.updateInfo(user, oldUsername, oldTelephone);
        }
    }

    /**
     * 修改密码
     */
    public Interaction modifyPassword(Users user,String oriPasswordInput,String modifiedPasswordInput,String inputAgain) throws SQLException {
        //密码的正则表达式(密码必须至少包含大小写字母+数字 最少六位)
        String pRegex = "\\S*(?=\\S{6,})(?=\\S*\\d)(?=\\S*[A-Z])(?=\\S*[a-z])\\S*$";
        //判空
        if(oriPasswordInput.length()==0){
            return new Interaction("原密码为空",null);
        }else if(modifiedPasswordInput.length()==0){
            return new Interaction("修改后密码为空",null);
        }else if(inputAgain.length()==0){
            return new Interaction("再次输入的密码为空",null);
        }
        //密码格式校验
        else if (!modifiedPasswordInput.matches(pRegex)) {
            return new Interaction("密码不符合规范", null);
        }else{
            //校验数据库操作
            return infoDao.modifyPassword(user,oriPasswordInput,modifiedPasswordInput);
        }
    }
}
